package cn.bluedot.tea.common;

import java.util.Map;

import cn.bluedot.framework.annotations.RequestView;
import cn.bluedot.framework.annotations.ResponseJson;
import cn.bluedot.framework.annotations.Service;
import cn.bluedot.framework.service.BaseService;
import cn.bluedot.framework.web.Result;
import cn.bluedot.tea.dao.BaseDao;

@Service
public class QueryService extends BaseService{
	
	public QueryService(){}
	
	public QueryService(String uri, Map<String, Object[]> params, Map<String, Object> data) {
		super(params, data); //调用父类有参构造，必须
		execute(uri, params, data); //执行业务，调用父类方法
	}
	
	/**
	 * 提供给前端的查询统一接口,规定 请求的 uri = /query/view_name
	 * @param params
	 * @param data
	 * @throws Exception
	 */
	@RequestView(uri = "/query/*")
	@ResponseJson
	private void exectueQuery(Map<String, Object[]> params, Map<String, Object> data) throws Exception {
		
		Map<String, Object> param = getParameterMap(params);
		Object query = query(param, null);
		
		if(query == null) {
			data.put("message","查询结果为空");
			data.put("Result", Result.FAILED);
			return;
		}
		data.put("message","查询结果返回");
		data.put("Result", Result.SUCCESS);
		data.put("query", query);		
	}
	
	/**
	 * 提供给外部接口使用的静态查询方法
	 * @param params 请求参数需包含view_name 和 查询所需的参数
	 * @param cls 
	 * @return cls为空时查询返回数量、map、list，非空返回查询对象（只支持简单对象）
	 * @throws Exception
	 */
	public static <T> Object query(Map<String, Object> params, Class<T> cls) throws Exception{ 
		return BaseDao.excuteQuery(params, cls);
	}
	
}
